package 蓝桥杯.算法板子.数学;

import java.io.*;
import java.util.*;
import java.util.StringTokenizer;
/**
 * @Title: 约数个数
 * @Author 贾金博
 * @Package 蓝桥杯.算法板子.数学
 * @Date 2024/4/12 20:27
 * @description: 约数的个数
 */
public class 约数的和 {
    public static FastReader sc = new FastReader();
    public static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    public static Long mod = 1000000007L;

    public static void main(String[] args) {
        int n = sc.nextInt();
        Map<Integer, Integer>mp = new HashMap<>();

        while(n -- != 0 ) {
            int x = sc.nextInt();
            for(int i = 2; i * i <= x; ++ i ) { // 这个是关键 i * i <= x
                if(x % i == 0) {
                    int t = 0;
                    while(x % i == 0 ) {
                        x /= i;
                        t ++ ;
                    }
                    mp.merge(i, t, Integer::sum);
                }
            }
            if(x > 1) {
                mp.merge(x, 1, Integer::sum);
            }
        }
        Long ret = 1l;
        for(int i : mp.keySet()) {
            long t = 0l;
            int cnt = mp.get(i);
            for(int j = 0; j <= cnt; ++ j ) {
                t = t % mod + ksm(i, j) % mod;
            }
            ret = ret % mod * t % mod;
        }
        out.println(ret);
        out.flush();
    }
    public static Long ksm(long a, long b) {
        Long ret = 1l;
        while (b != 0 ) {
            if((b & 1) == 1) {
                ret = ret * a % mod;
            }
            a =  (a * a % mod);
            b >>= 1;
        }
        return ret % mod;
    }
}



//class FastReader{
//    StringTokenizer st;
//    BufferedReader br;
//    public FastReader(){
//        br=new BufferedReader(new InputStreamReader(System.in));
//    }
//
//    String next(){
//        while (st==null||!st.hasMoreElements()){
//            try {
//                st=new StringTokenizer(br.readLine());
//            }catch (IOException e){
//                e.printStackTrace();
//            }
//        }
//        return st.nextToken();
//    }
//    int nextInt() {
//        return Integer.parseInt(next());
//    }
//
//    long nextLong() {
//        return Long.parseLong(next());
//    }
//    double nextDouble() {
//        return Double.parseDouble(next());
//    }
//    String nextLine() {
//        String str = "";
//        try {
//            str = br.readLine();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return str;
//    }
//}


